// 从 Vue 中导入 inject，用于获取祖先组件提供的依赖（这里是 Toast 组件的引用）
import { inject } from 'vue';

// 自定义组合式函数，方便调用全局 Toast 功能
export const useToast = () => {
    // 从依赖注入中获取 key 为 'toast' 的引用，通常是 Toast 组件实例的 ref
    const toast = inject('toast');

    // 如果没找到 toast，打印警告，防止静默失败，返回空函数避免报错
    if (!toast?.value) {
        console.warn('[useToast] 未找到 Toast 实例，请确保提供该实例');
        return {
            success: () => {}, // 空函数，防止调用时报错
            error: () => {},
            info: () => {},
            warning: () => {}
        };
    }

    // 通用弹窗显示函数，传入类型、消息内容和持续时间（默认3秒）
    const show = (type, message, duration = 3000) => {
        if (!message) return; // 如果消息为空，直接不展示，避免无意义的弹窗

        // 调用 Toast 组件实例的方法，添加一条对应类型的弹窗
        toast.value.addToast(type, message, duration);
    };

    // 对外暴露四种不同类型的快捷调用方法，错误和警告提示持续时间默认5s
    return {
        success: (msg, d) => show('success', msg, d), // 成功提示
        error: (msg, d = 5000) => show('error', msg, d), // 错误提示
        info: (msg, d) => show('info', msg, d), // 信息提示
        warning: (msg, d = 5000) => show('warning', msg, d) // 警告提示
    };
};
